// Problem: 
// Contest: 
// URL: 
// Memory Limit: 
// Time Limit: 
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
int ans=INT_MAX;
int n,m;
int cw[51],cb[51],cr[51];
vector<vector<char>> c;
//void dfs(int i,int f)
//{
//	if(f==0)
//	{
//		for(int j=0;j<m;j++)
//		{
//			if(c[i][j]!='W')cw++;
//		}
//		dfs(i+1,f);
//		dfs(i+1,f+1);
//	}
//	if(f==1)
//	{
//		for(int j=0;j<m;j++)
//		{
//			if(c[i][j]!='B')cb++;
//		}
//		dfs(i+1,f);
//		dfs(i+1,f+1);
//	}
//	if(f==2)
//	{
//		for(int j=0;j<m;j++)
//		{
//			if(c[i][j]!='R')cr++;
//		}
//		dfs(i+1,f);
//	}
//}
string s;
int check(char c)
{
	int ret=0;
	for(int i=0;i<m;i++)
	{
		if(s[i]!=c)ret++;
	}
	return ret;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		cw[i]=cw[i-1]+check('W');
		cb[i]=cb[i-1]+check('B');
		cr[i]=cr[i-1]+check('R');
	}
	for(int i=1;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			ans=min(ans,cw[i]+cb[j]-cb[i]+cr[n]-cr[j]);
		}
	}
	cout<<ans;
	return 0;
}
